#pragma once

#include <functional>
#include <boost/noncopyable.hpp>
#include <windows.h>

namespace umtl
{
	//////////////////////////////////////////////////////////////////////////
	//

	template<typename DataType>
	class lockfree_queue : boost::noncopyable
	{
	public:
		lockfree_queue();

		virtual ~lockfree_queue();

		bool push( const DataType * data );

		bool pop( DataType*& data );

		inline bool is_valid() const { return iocp != INVALID_HANDLE_VALUE; }

		inline LONG size() const { return qeueSize; }

	private:

		HANDLE iocp;
		LONG qeueSize;
	};	

	//////////////////////////////////////////////////////////////////////////
}

#include "lockfree_queue.hpp"